package com.club.config;

import cn.dev33.satoken.stp.StpInterface;
import com.club.entity.User;
import com.club.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * Sa-Token 权限验证接口实现
 */
@Component
public class StpInterfaceImpl implements StpInterface {

    @Autowired
    private UserService userService;

    /**
     * 返回指定账号的权限码集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginKey) {
        List<String> permissions = new ArrayList<>();
        
        // 获取用户信息 - 转换类型
        User user = userService.getById(Long.valueOf(loginId.toString()));
        if (user != null) {
            // 根据用户角色设置权限
            Integer role = user.getRole();
            if (role == 2) { // 管理员
                permissions.add("*" ); // 管理员拥有所有权限
            } else if (role == 1) { // 社团负责人
                permissions.add("club:*" );
                permissions.add("activity:*" );
            } else { // 普通用户
                permissions.add("user:view" );
                permissions.add("activity:participate" );
            }
        }
        
        return permissions;
    }

    /**
     * 返回指定账号的角色标识集合
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginKey) {
        List<String> roles = new ArrayList<>();
        
        // 获取用户信息 - 转换类型
        User user = userService.getById(Long.valueOf(loginId.toString()));
        if (user != null) {
            // 根据用户角色设置角色标识
            Integer role = user.getRole();
            if (role == 2) {
                roles.add("admin");
            } else if (role == 1) {
                roles.add("club_leader");
            } else {
                roles.add("user");
            }
        }
        
        return roles;
    }
}